package com.itheima.reggie.common;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import java.sql.SQLIntegrityConstraintViolationException;


/**
 * 全局异常代理
 */
@ControllerAdvice(annotations = {RestController.class})
@ResponseBody
@Slf4j
public class GlobalExceptionnHandler {
    /**
     * 异常处理方法
     * @param ex
     * @return
     */
    // 数据库的约束错误信息，可能有很多：主键 唯一 非空约束 外键约束
    @ExceptionHandler(SQLIntegrityConstraintViolationException.class)
    public R<String>  handlerSQLConstraintException(SQLIntegrityConstraintViolationException ex) {
        String message = ex.getMessage();

        // 1、打印异常信息 log.error()  getMessage
        log.error(message);
        // 2、获取异常信息 getMessage()  Duplicate entry '111' for key 'idx_username'

        // 3、判断异常信息是唯一约束异常  contains("Duplicate entry")
        if (message.contains("Duplicate entry")) {//违反的是唯一约束
            //3.1、如果是，获取异常信息中的用户名 split  replace ，返回 xxx已存在
            String[] split = message.split("'");
            return R.error(split[1] + "已存在");

        }
            //3.2、如果不是，返回 “数据异常！！”
            return R.error("未知错误，数据异常！");

    }


    /**
     * 异常处理方法
     * @param ex
     * @return
     */
    // 数据库的约束错误信息，可能有很多：主键 唯一 非空约束 外键约束
    @ExceptionHandler(CustomException.class)
    public R<String>  ExceptionHandler(CustomException ex) {
        String message = ex.getMessage();

        // 1、打印异常信息 log.error()  getMessage
        log.error(message);
        // 2、获取异常信息 getMessage()  Duplicate entry '111' for key 'idx_username'


        return R.error(ex.getMessage());

    }
}
